package psrc.bd.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import psrc.bd.util.ConnectionFactory;
import psrc.logic.util.beans.ComissaoRepresentanteBean;

public class ConsultaComissaoRepresentanteDAO {

	private Connection connection;

	public ConsultaComissaoRepresentanteDAO(Connection conn) {
		if (conn != null) {
			this.connection = conn;
		} else {
			this.connection = new ConnectionFactory().getConnection();
		}
	}

	public ComissaoRepresentanteBean comissao(String representante, String fabrica, String dataInicio, String dataFim) throws SQLException {

		try {
			String sql = "SELECT r.nome, f.nome_fantasia, SUM(prod.preco) AS total_vendas "
					+ "CASE r.tipo_representante WHEN 'direto' "
					+ "THEN (SUM(prod.preco) * f.comissao_direto / 100) + (SUM(prod.preco) * (f.comissao_direto - f.comissao_preposto) / 100) "
					+ "ELSE (SUM(prod.preco) * f.comissao_preposto / 100) "
					+ "END "
					+ "FROM Representante r, Pedido p, Produto prod, Fabrica f "
					+ "WHERE r.id_representante = ? AND f.id_fabrica = p.fk_fabrica AND p.data_pedido > '?' AND p.data_pedido < '?' AND r.id_representante = p.fk_representante AND p.id_pedido = prod.fk_pedido "
					+ "GROUP BY r.nome, r.tipo_representante, f.comissao_direto, f.comissao_preposto, f.nome_fantasia;";

			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, representante);
			stmt.setString(2, dataInicio);
			stmt.setString(3, dataFim);

			ResultSet rs = stmt.executeQuery();

			ComissaoRepresentanteBean bean = new ComissaoRepresentanteBean();
			bean.setNomeRepresentante(rs.getString("nome"));
			bean.setComissao(rs.getDouble("total_vendas"));
			bean.setComissao(rs.getDouble("case"));

			rs.close();
			stmt.close();
			return bean;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}
}
